// 联合类型 一般我们会基于联合类型来扩展额外的类型
// 字面量类型 type可以声明一个类型
type Direction = 'up' | 'down' | 'right' | 'left';
let direction: Direction = 'down';

// type中定义的是类型 不是js对象
// 可以利用联合类型来做到属性之间的互斥（可辨别联合类型）
type women = {
    wealthy: true; //:后面是类型
    waste: string
} | {
    wealthy: false; //:后面是类型
    norality: string 
}

let richWoman: women = {
    wealthy: true, //:后面是类型
    waste:"随便花"
}
let poorWoman: women = {
    wealthy: false,
    norality: '勤俭持家'
}

// 非空断言(！,这个值一定不为空,绕过ts检测)
let ele:HTMLElement | null | string = document.getElementById('app');
// ele!.style.background = "red"; // ts
// ele?.style.background // js可选链操作符
// false ?? 1; // 空值合并操作符，除了null 和 undefined  都会返回左边的值
// as 断言 可以强制把某个类型断言成已经存在的某个类型
(ele as HTMLElement).style.background = "red";
// 双重断言 我们可以把一个值 断言成any 再断言成某个类型
// any 类型可以赋予给任何类型
let str: string | number
str! as any as boolean;

export {}
